package template

import (
	v1 "go_muban/api/template/v1"
	"go_muban/internal/service"
	"go_muban/utility"

	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

// Controller 模板控制器
type Controller struct{}

// NewController 创建控制器
func NewController() *Controller {
	return &Controller{}
}

// List 模板列表页
func (c *Controller) List(r *ghttp.Request) {
	var (
		ctx = r.GetCtx()
		req = &v1.ListReq{}
	)
	// 解析请求参数
	if err := r.Parse(req); err != nil {

		utility.WriteTplByLayout(r, "error.html", g.Map{
			"error": err.Error(),
		})
		return
	}

	// 获取模板列表数据
	res, err := service.Template().GetList(ctx, req)
	if err != nil {
		utility.WriteTplByLayout(r, "error.html", g.Map{
			"error": err.Error(),
		})
		return
	}

	utility.WriteTplByLayout(r, "templates/list.html", g.Map{
		"templates":       res.Templates,
		"categories":      res.Categories,
		"tags":            res.Tags,
		"currentCategory": req.Category,
		"currentTag":      req.Tag,
		"pagination":      res.Pagination,
	})
}

// Detail 模板详情页
func (c *Controller) Detail(r *ghttp.Request) {
	var (
		ctx = r.GetCtx()
		req = &v1.DetailReq{}
	)
	// 解析请求参数
	if err := r.Parse(req); err != nil {
		utility.WriteTplByLayout(r, "error.html", g.Map{
			"error": err.Error(),
		})
		return
	}

	// 获取模板详情数据
	res, err := service.Template().GetDetail(ctx, req)
	if err != nil {
		utility.WriteTplByLayout(r, "error.html", g.Map{
			"error": err.Error(),
		})
		return
	}

	utility.WriteTplByLayout(r, "templates/detail.html", g.Map{
		"template":         res.Template,
		"relatedTemplates": res.RelatedTemplates,
	})

}
